// 顺序存储

#include "stdio.h"
#include "string.h"

#define OK 1
#define ERROR 0

typedef int Status;
typedef char TElemType;

#define  MAX_TREE_SIZE 100     // 二叉树的最大结点数

typedef TElemType SqBiTree[MAX_TREE_SIZE + 1];    // 1号单元存储根结点

Status CreateBiTree(SqBiTree &T, int n) {
    for (int i = 1; i <= n; i++) {
        scanf("%c", &T[i]);
    }
    return OK;
}//按输入1-n位置的值构建二叉树，字符#表示空树

void PreOrderTraverse(SqBiTree T, int num, int n) {
    if (T[num] == '#' || num > n) {
        return;
    } else {
        printf("%c", T[num]);
        PreOrderTraverse(T, 2 * num, n);
        PreOrderTraverse(T, 2 * num + 1, n);
        return;
    }
}//先序遍历输出根结点编号为num的二叉树各个节点的值，空树不输出。其中n为完二叉树结点数

void InOrderTraverse(SqBiTree T, int num, int n) {
    if (T[num] == '#' || num > n) {
        return;
    } else {
        InOrderTraverse(T, 2 * num, n);
        printf("%c", T[num]);
        InOrderTraverse(T, 2 * num + 1, n);
        return;
    }
}//中序遍历输出根结点编号为num的二叉树各个节点的值，空树不输出

void PostOrderTraverse(SqBiTree T, int num, int n) {
    if (T[num] == '#' || num > n) {
        return;
    } else {
        PostOrderTraverse(T, 2 * num, n);
        PostOrderTraverse(T, 2 * num + 1, n);
        printf("%c", T[num]);
        return;
    }
}//后序遍历输出根结点编号为num的二叉树各个节点的值，空树不输出